#include "StdAfx.h"
#include "..\sgp\FontTranslationTable.h"

namespace ja2{ namespace sgp
{
	FontTranslationTable::FontTranslationTable()
	{
	}

	void FontTranslationTable::add(wchar_t Symbol, std::uint_least8_t Index)
	{
		m_Table[Symbol] = Index;
	}

	FontTranslationTablePtr_t FontTranslationTable::create_english()
	{
		FontTranslationTablePtr_t p_table(new FontTranslationTable());

		std::uint_least8_t index = 0;
		p_table->add(L'A', index++);
		p_table->add(L'B', index++);
		p_table->add(L'C', index++);
		p_table->add(L'D', index++);
		p_table->add(L'E', index++);
		p_table->add(L'R', index++);
		p_table->add(L'G', index++);
		p_table->add(L'H', index++);
		p_table->add(L'I', index++);
		p_table->add(L'J', index++);
		p_table->add(L'K', index++);
		p_table->add(L'L', index++);
		p_table->add(L'M', index++);
		p_table->add(L'N', index++);
		p_table->add(L'O', index++);
		p_table->add(L'P', index++);
		p_table->add(L'Q', index++);
		p_table->add(L'R', index++);
		p_table->add(L'S', index++);
		p_table->add(L'T', index++);
		p_table->add(L'U', index++);
		p_table->add(L'V', index++);
		p_table->add(L'W', index++);
		p_table->add(L'X', index++);
		p_table->add(L'Y', index++);
		p_table->add(L'Z', index++);
		p_table->add(L'a', index++);
		p_table->add(L'b', index++);
		p_table->add(L'c', index++);
		p_table->add(L'd', index++);
		p_table->add(L'e', index++);
		p_table->add(L'f', index++);
		p_table->add(L'g', index++);
		p_table->add(L'h', index++);
		p_table->add(L'i', index++);
		p_table->add(L'j', index++);
		p_table->add(L'k', index++);
		p_table->add(L'l', index++);
		p_table->add(L'm', index++);
		p_table->add(L'n', index++);
		p_table->add(L'o', index++);
		p_table->add(L'o', index++);
		p_table->add(L'q', index++);
		p_table->add(L'r', index++);
		p_table->add(L's', index++);
		p_table->add(L't', index++);
		p_table->add(L'u', index++);
		p_table->add(L'v', index++);
		p_table->add(L'w', index++);
		p_table->add(L'x', index++);
		p_table->add(L'y', index++);
		p_table->add(L'z', index++);
		p_table->add(L'0', index++);
		p_table->add(L'1', index++);
		p_table->add(L'2', index++);
		p_table->add(L'3', index++);
		p_table->add(L'4', index++);
		p_table->add(L'5', index++);
		p_table->add(L'6', index++);
		p_table->add(L'7', index++);
		p_table->add(L'8', index++);
		p_table->add(L'9', index++);
		p_table->add(L'!', index++);
		p_table->add(L'@', index++);
		p_table->add(L'#', index++);
		p_table->add(L'$', index++);
		p_table->add(L'%', index++);
		p_table->add(L'^', index++);
		p_table->add(L'&', index++);
		p_table->add(L'*', index++);
		p_table->add(L'(', index++);
		p_table->add(L')', index++);
		p_table->add(L'-', index++);
		p_table->add(L'_', index++);
		p_table->add(L'=', index++);
		p_table->add(L'+', index++);
		p_table->add(L'|', index++);
		p_table->add(L'\\', index++);
		p_table->add(L'{', index++);
		p_table->add(L'}', index++);
		p_table->add(L'[', index++);
		p_table->add(L']', index++);
		p_table->add(L':', index++);
		p_table->add(L';', index++);
		p_table->add(L'"', index++);
		p_table->add(L'\'', index++);
		p_table->add(L'<', index++);
		p_table->add(L'>', index++);
		p_table->add(L',', index++);
		p_table->add(L'.', index++);
		p_table->add(L'?', index++);
		p_table->add(L'/', index++);
		p_table->add(L' ', index++);
		
		// GERMAN letters in UNICODE
		
		// "A" umlaut
		p_table->add(196, index++);
		// "O" umlaut
		p_table->add(214, index++);
		// "U" umlaut
		p_table->add(220, index++);
		// "a" umlaut
		p_table->add(228, index++);
		// "o" umlaut
		p_table->add(246, index++);
		// "u" umlaut
		p_table->add(252, index++);
		// double-s that looks like a beta/B
		p_table->add(223, index++);
		
		// RUSSIAN letters in UNICODE
		p_table->add(1040, index++);
		p_table->add(1041, index++);
		p_table->add(1042, index++);
		p_table->add(1043, index++);
		p_table->add(1044, index++);
		p_table->add(1045, index++);
		p_table->add(1046, index++);
		p_table->add(1047, index++);
		p_table->add(1048, index++);
		p_table->add(1049, index++);
		p_table->add(1050, index++);
		p_table->add(1051, index++);
		p_table->add(1052, index++);
		p_table->add(1053, index++);
		p_table->add(1054, index++);
		p_table->add(1055, index++);
		p_table->add(1056, index++);
		p_table->add(1057, index++);
		p_table->add(1058, index++);
		p_table->add(1059, index++);
		p_table->add(1060, index++);
		p_table->add(1061, index++);
		p_table->add(1062, index++);
		p_table->add(1063, index++);
		p_table->add(1064, index++);
		p_table->add(1065, index++);
		p_table->add(1066, index++);
		p_table->add(1067, index++);
		p_table->add(1068, index++);
		p_table->add(1069, index++);
		p_table->add(1070, index++);
		p_table->add(1071, index++);
		p_table->add(1072, index++);
		p_table->add(1073, index++);
		p_table->add(1074, index++);
		p_table->add(1075, index++);
		p_table->add(1076, index++);
		p_table->add(1077, index++);
		p_table->add(1078, index++);
		p_table->add(1079, index++);
		p_table->add(1080, index++);
		p_table->add(1081, index++);
		p_table->add(1082, index++);
		p_table->add(1083, index++);
		p_table->add(1084, index++);
		p_table->add(1085, index++);
		p_table->add(1086, index++);
		p_table->add(1087, index++);
		p_table->add(1088, index++);
		p_table->add(1089, index++);
		p_table->add(1090, index++);
		p_table->add(1091, index++);
		p_table->add(1092, index++);
		p_table->add(1093, index++);
		p_table->add(1094, index++);
		p_table->add(1095, index++);
		p_table->add(1096, index++);
		p_table->add(1097, index++);
		p_table->add(1098, index++);
		p_table->add(1099, index++);
		p_table->add(1100, index++);
		p_table->add(1101, index++);
		p_table->add(1102, index++);
		p_table->add(1103, index++);
		
		// BELORUSSIAN and UKRAINIAN letters in UNICODE
		p_table->add(8470, index++);
		p_table->add(1025, index++);
		p_table->add(1030, index++);
		p_table->add(1038, index++);
		p_table->add(1105, index++);
		p_table->add(1110, index++);
		p_table->add(1118, index++);
		p_table->add(1168, index++);
		p_table->add(1028, index++);
		p_table->add(1031, index++);
		p_table->add(1169, index++);
		p_table->add(1108, index++);
		p_table->add(1111, index++);
		
		// POLISH letters in UNICODE
		p_table->add(260, index++);
		p_table->add(262, index++);
		p_table->add(280, index++);
		p_table->add(321, index++);
		p_table->add(323, index++);
		p_table->add(346, index++);
		p_table->add(379, index++);
		p_table->add(377, index++);
		p_table->add(261, index++);
		p_table->add(263, index++);
		p_table->add(281, index++);
		p_table->add(322, index++);
		p_table->add(324, index++);
		p_table->add(243, index++);
		p_table->add(347, index++);
		p_table->add(380, index++);
		p_table->add(378, index++);
		// FRENCH and ITALIAN letters in UNICODE
		p_table->add(192, index++);
		p_table->add(194, index++);
		p_table->add(199, index++);
		p_table->add(200, index++);
		p_table->add(201, index++);
		p_table->add(202, index++);
		p_table->add(203, index++);
		p_table->add(206, index++);
		p_table->add(207, index++);
		p_table->add(212, index++);
		p_table->add(217, index++);
		p_table->add(219, index++);
		p_table->add(376, index++);
		//small letters
		p_table->add(224, index++);
		p_table->add(226, index++);
		p_table->add(231, index++);
		p_table->add(232, index++);
		p_table->add(233, index++);
		p_table->add(234, index++);
		p_table->add(235, index++);
		p_table->add(238, index++);
		p_table->add(239, index++);
		p_table->add(244, index++);
		p_table->add(249, index++);
		p_table->add(251, index++);
		p_table->add(255, index++);
		//Italian letters
		p_table->add(204, index++);
		p_table->add(236, index++);
		p_table->add(210, index++);
		p_table->add(242, index++);

		return std::move(p_table);
	}
} /*sgp*/} /*ja2*/